// import Footer from '@/components/Footer';
import RightContent from '@/components/RightContent';
// import { LinkOutlined } from '@ant-design/icons';
import type { Settings as LayoutSettings } from '@ant-design/pro-components';
// import { SettingDrawer } from '@ant-design/pro-components';
import { get_menu_list_api } from '@/services/public';
import { login_userinfo as queryCurrentUser } from '@/services/user';
import fixMenuItemIcon from '@/utils/fixMenuItemIcon';
import type { RunTimeLayoutConfig } from '@umijs/max';
import { history } from '@umijs/max';
import { Image } from 'antd';
import logoImage from '@/assets/logo.png';
import defaultSettings from '../config/defaultSettings';
import { errorConfig } from './requestErrorConfig';
const isDev = process.env.NODE_ENV === 'development';
const loginPath = '/user/login';

// 选择日期显示中文
import dayjs from 'dayjs';
import 'dayjs/locale/zh-cn';
dayjs.locale('zh-cn');

/**
 * @see  https://umijs.org/zh-CN/plugins/plugin-initial-state
 * */
export async function getInitialState(): Promise<{
  settings?: Partial<LayoutSettings>;
  currentUser?: UserApi.CurrentUser;
  loading?: boolean;
  fetchUserInfo?: () => Promise<UserApi.CurrentUser | undefined>;
}> {
  const fetchUserInfo = async () => {
    try {
      const msg = await queryCurrentUser();
      msg.data.type = msg.data.type ?? '-1';
      msg.data.token = localStorage.getItem('token') ?? '';
      msg.data.user.photo = msg.data.user.photo ?? '';
      console.log(msg.data);
      return msg.data;
    } catch (error) {
      history.push(loginPath);
    }
    return undefined;
  };
  // 如果不是登录页面，执行
  const { location } = history;
  if (location.pathname !== loginPath) {
    const currentUser = await fetchUserInfo();
    return {
      fetchUserInfo,
      currentUser,
      settings: defaultSettings as Partial<LayoutSettings>,
    };
  }
  return {
    fetchUserInfo,
    settings: defaultSettings as Partial<LayoutSettings>,
  };
}

// ProLayout 支持的api https://procomponents.ant.design/components/layout
export const layout: RunTimeLayoutConfig = ({ initialState }) => {
  return {
    logo: <Image height={56} preview={false} src={logoImage} />,
    menu: isDev
      ? undefined
      : {
          // 每当 initialState?.currentUser?.userid 发生修改时重新执行 request
          params: {
            userId: initialState?.currentUser?.user.id,
          },
          request: async (params) => {
            // initialState.currentUser 中包含了所有用户信息
            // console.log(defaultMenuData);
            if (params.userId) {
              const menuData = await get_menu_list_api(params.userId);
              // console.log(menuData);
              return fixMenuItemIcon(menuData.data);
            }
            return [];
          },
        },
    //会增加js代码2M左右(二级菜单显示图标，官方不推荐)
    // menuItemRender: (menuItemProps, defaultDom) => {
    //   console.log(menuItemProps);
    //   if (menuItemProps.isUrl || !menuItemProps.path) {
    //     return <Space>defaultDom</Space> ;
    //   }
    //   // 支持二级菜单显示icon
    //   return (
    //     <Link to={menuItemProps.path}>
    //       <Space>
    //         {menuItemProps.pro_layout_parentKeys &&
    //           menuItemProps.pro_layout_parentKeys.length > 0 &&
    //           menuItemProps.icon}
    //         {defaultDom}
    //       </Space>
    //     </Link>
    //   );
    // },
    openKeys: false, //点击子菜单是否收起其他菜单
    rightContentRender: () => <RightContent />,
    waterMarkProps: {
      content: initialState?.currentUser?.user.trueName,
    },
    // footerRender: () => <Footer />,
    onPageChange: () => {
      const { location } = history;
      // 如果没有登录，重定向到 login
      if (!initialState?.currentUser && location.pathname !== loginPath) {
        history.push(loginPath);
      }
    },
    // layoutBgImgList: [
    //   {
    //     src: 'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/D2LWSqNny4sAAAAAAAAAAAAAFl94AQBr',
    //     left: 85,
    //     bottom: 100,
    //     height: '303px',
    //   },
    //   {
    //     src: 'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/C2TWRpJpiC0AAAAAAAAAAAAAFl94AQBr',
    //     bottom: -68,
    //     right: -45,
    //     height: '303px',
    //   },
    //   {
    //     src: 'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/F6vSTbj8KpYAAAAAAAAAAAAAFl94AQBr',
    //     bottom: 0,
    //     left: 0,
    //     width: '331px',
    //   },
    // ],
    // links: isDev
    //   ? [
    //       <Link key="openapi" to="/umi/plugin/openapi" target="_blank">
    //         <LinkOutlined />
    //         <span>OpenAPI 文档</span>
    //       </Link>,
    //     ]
    //   : [],
    menuHeaderRender: undefined,
    // 自定义 403 页面
    // unAccessible: <div>unAccessible</div>,
    // 增加一个 loading 的状态
    childrenRender: (children) => {
      // if (initialState?.loading) return <PageLoading />;
      return (
        <>
          {children}
          {/* <SettingDrawer
            disableUrlParams
            enableDarkTheme
            settings={initialState?.settings}
            onSettingChange={(settings) => {
              setInitialState((preInitialState) => ({
                ...preInitialState,
                settings,
              }));
            }}
          /> */}
        </>
      );
    },
    ...initialState?.settings,
  };
};

/**
 * @name request 配置，可以配置错误处理
 * 它基于 axios 和 ahooks 的 useRequest 提供了一套统一的网络请求和错误处理方案。
 * @doc https://umijs.org/docs/max/request#配置
 */
export const request = {
  ...errorConfig,
};
